package com.zrq.gencode.jdbc;

import com.zrq.gencode.util.Comvlt;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.sql.Connection;
import java.sql.Statement;

/**
 * @author ZRQ
 */
public class CreateTable {
	private static final String PROPERTIES = "src/main/resources/sql";
	private static final Logger log = LoggerFactory.getLogger(CreateTable.class);

	public static void implementSql() {
		File file = new File(PROPERTIES);
		if (file.isDirectory()) {
			File[] sqlFiles = Comvlt.traverseSql(file, "sql");
			for (File sqlFile : sqlFiles) {
				// 检查文件是否存在且可读
				if (sqlFile.exists() && sqlFile.canRead()) {
					executeSqlFile(sqlFile);
				} else {
					log.debug("SQL文件 {} 不存在或不可读", sqlFile.getName());
				}
			}
		} else {
			log.debug("SQL目录不存在: " + PROPERTIES);
		}
	}

	/**
	 * 执行单个SQL文件
	 *
	 * @param sqlFile SQL文件
	 */
	private static void executeSqlFile(File sqlFile) {

		try (Connection conn = ConnectionPool.getConnection(); Statement stmt = conn.createStatement()) {

			// 读取并执行SQL文件（这里简化处理，实际项目中可能需要更复杂的SQL解析）
			String sql = new String(java.nio.file.Files.readAllBytes(sqlFile.toPath()));
			stmt.execute(sql);

			// 重命名已执行的文件
			sqlFile.renameTo(new File(sqlFile.getParent() + File.separator + sqlFile.getName() + ".back"));

			System.out.println("成功执行SQL文件: " + sqlFile.getName());
		} catch (Exception e) {
			System.err.println("执行SQL文件 " + sqlFile.getName() + " 时出错: " + e.getMessage());
			e.printStackTrace();
		}
		// 关闭资源
		// 连接池连接会自动返回池中
	}
}